package com.lm.lua.config;

import org.luaj.vm2.Globals;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.Varargs;
import org.luaj.vm2.lib.jse.JsePlatform;

import java.io.*;

public class LuaScriptManager {

    private final Globals globals;

    public LuaScriptManager() {
        globals = JsePlatform.standardGlobals();
    }

    /**
     * 加载并执行 Lua 脚本，返回 LuaValue（通常是包含函数的 table）
     */
    public LuaValue loadScript(String filePath) {
        LuaValue chunk = null;
        try {
            chunk = globals.load(new FileReader(filePath), "script");
        } catch (FileNotFoundException e) {

        }
        return chunk.call();  // 执行脚本，返回值必须是 table（如 return { greet = ... }）
    }

    /**
     * 调用 Lua 脚本中的函数
     */
    public LuaValue executeFunction(LuaValue script, String functionName, LuaValue... args) {
        LuaValue function = script.get(functionName);
        if (!function.isfunction()) {
            throw new RuntimeException("Function '" + functionName + "' not found in script");
        }
        Varargs invoke = function.invoke(args);
        return invoke.arg1();
    }

    /**
     * 如果你用的是全局函数（非模块返回），可直接从 globals 取函数
     */
    public LuaValue executeGlobalFunction(String functionName, LuaValue... args) {
        LuaValue function = globals.get(functionName);
        if (!function.isfunction()) {
            throw new RuntimeException("Global function '" + functionName + "' not found");
        }
        return function.invoke(args).arg1();
    }
}